// interceptors.js
import { useAuthStore } from '@/stores/auth'

export function setupInterceptors(instance) {
    // 请求拦截器：自动加上 token
    instance.interceptors.request.use(config => {
        const authStore = useAuthStore()
        if (authStore.token) {
            config.headers['Authorization'] = `Bearer ${authStore.token}`
        }
        return config
    })

    // 响应拦截器
    instance.interceptors.response.use(
        response => {
            const authStore = useAuthStore()

            // 如果后端返回新的 token，更新它
            const authHeader = response.headers['authorization']
            if (authHeader) {
                const newToken = authHeader.replace(/^Bearer\\s+/i, '')
                authStore.setToken(newToken)
            }

            // 如果后端返回业务码 401（自定义逻辑）
            if (response.data.code === 401) {
                authStore.clearToken()
                // 这里不要直接调用 fetchToken，否则会和 error 分支重复
                window.location.reload()
            }

            return response
        },
        async error => {
            const originalRequest = error.config
            const authStore = useAuthStore()

            // 跳过 token 获取接口本身
            if (originalRequest.url?.startsWith('/auth')) {
                return Promise.reject(error)
            }

            // 处理 HTTP 401
            if (error.response?.status === 401 && !originalRequest._retry) {
                originalRequest._retry = true
                try {
                    const newToken = await authStore.fetchTokenOnce()
                    originalRequest.headers['Authorization'] = `Bearer ${newToken}`
                    return instance(originalRequest)
                } catch (refreshError) {
                    authStore.clearToken()
                    return Promise.reject(refreshError)
                }
            }

            return Promise.reject(error)
        }
    )
}
